#pragma once
#ifndef QUERYPARSERTEST_H
#define QUERYPARSERTEST_H

#if _DEBUG

#include <cppunit/extensions/HelperMacros.h>
#include "../source/QueryParser.h"

class QueryParserTest : public CPPUNIT_NS::TestFixture 
{
	CPPUNIT_TEST_SUITE( QueryParserTest );
	CPPUNIT_TEST( test1 );
	CPPUNIT_TEST( test2 );
	CPPUNIT_TEST( test3 );
	CPPUNIT_TEST( test4 );
	CPPUNIT_TEST( test5 );
	CPPUNIT_TEST( test6 );
	CPPUNIT_TEST( test7 );
	CPPUNIT_TEST( test8 );
	CPPUNIT_TEST( test9 );
	CPPUNIT_TEST( test10 );
	CPPUNIT_TEST( test11 );
	CPPUNIT_TEST( test12 );
	CPPUNIT_TEST( test13 );
	CPPUNIT_TEST( test14 );
	CPPUNIT_TEST( test15 );
	CPPUNIT_TEST( test16 );
	CPPUNIT_TEST( test17 );
	CPPUNIT_TEST( test18 );
	CPPUNIT_TEST( test19 );
	CPPUNIT_TEST( test20 );
	CPPUNIT_TEST( test21 );
	CPPUNIT_TEST( test22 );
	CPPUNIT_TEST( test23 );
	CPPUNIT_TEST( test24 );
	CPPUNIT_TEST( test25 );
	CPPUNIT_TEST( test26 );
	CPPUNIT_TEST( test27 );
	CPPUNIT_TEST( test28 );
	CPPUNIT_TEST( test29 );
	CPPUNIT_TEST( test30 );
	CPPUNIT_TEST( test31 );
	CPPUNIT_TEST( test32 );
	CPPUNIT_TEST( test33 );
	CPPUNIT_TEST( test34 );
	CPPUNIT_TEST( test35 );
	CPPUNIT_TEST( test36 );
	CPPUNIT_TEST( test37 );
	CPPUNIT_TEST( test38 );
	CPPUNIT_TEST( test39 );
	CPPUNIT_TEST( test40 );
	CPPUNIT_TEST_SUITE_END();

	private:
		QueryParser _query_parser;

		// underscore
		query_parameter any;
		// boolean
		query_parameter boolean;
		// variables
		query_declaration v, v1, v2;
		// prog_line
		query_declaration p, p1, p2;
		// stmt
		query_declaration s, s1, s2;
		// assign
		query_declaration a, a1, a2;
		// call
		query_declaration c, c1, c2;
		// procedure
		query_declaration pr, pr1, pr2;
		// if
		query_declaration i, i1, i2;
		// while
		query_declaration w, w1, w2;
		// constant
		query_declaration cn, cn1, cn2;

		// relations
		query_relation with;
		query_relation modifies;
		query_relation uses;
		query_relation calls, calls_t;
		query_relation parent, parent_t;
		query_relation follows, follows_t;
		query_relation next, next_t, nextbip, nextbip_t;
		query_relation affects, affects_t, affectsbip, affectsbip_t;
		query_relation pattern;
		query_relation sibling;

	public:
		void setUp();
		void tearDown();

		void test1();
		void test2();
		void test3();
		void test4();
		void test5();
		void test6();
		void test7();
		void test8();
		void test9();
		void test10();
		void test11();
		void test12();
		void test13();
		void test14();
		void test15();
		void test16();
		void test17();
		void test18();
		void test19();
		void test20();
		void test21();
		void test22();
		void test23();
		void test24();
		void test25();
		void test26();
		void test27();
		void test28();
		void test29();
		void test30();
		void test31();
		void test32();
		void test33();
		void test34();
		void test35();
		void test36();
		void test37();
		void test38();
		void test39();
		void test40();
};

#endif

#endif